package com.sr.maven.dao;

import com.sr.maven.util.JDBCUtils;
import org.apache.commons.dbutils.QueryRunner;
import org.apache.commons.dbutils.handlers.BeanHandler;
import org.apache.commons.dbutils.handlers.BeanListHandler;

import java.sql.Connection;
import java.sql.SQLException;
import java.util.List;

/**
 * BaseDao类：所有Dao类实现类的基类
 * @param <T> 实体类的类型
 */
public class BaseDao<T> {

    //DBUtils 工具包提供的数据操作对象
    private QueryRunner runner = new QueryRunner();

    /**
     * 查询单个对象
     * @param sql sql语句
     * @param entityBean 实体类对象
     * @param parameters 传给sql语句的参数
     * @return 查询到的实体类对象
     */
    public T getSingleBean(String sql ,Class<T> entityBean,Object ... parameters){

        //获取数据库连接
        Connection connection = JDBCUtils.getConnection();
        try {
            return runner.query(connection,sql,new BeanHandler<>(entityBean),parameters);
        } catch (SQLException e) {
            e.printStackTrace();
            throw  new RuntimeException(e);
        }
    }


    /**
     * 查询多个对象
     * @param sql sql语句
     * @param entityBean 实体类对象
     * @param parameters 传给sql语句的参数
     * @return 查询到的实体类对象
     */
    public List<T> getBeanList(String sql , Class<T> entityBean, Object ... parameters){

        //获取数据库连接
        Connection connection = JDBCUtils.getConnection();
        try {
            return runner.query(connection,sql,new BeanListHandler<>(entityBean),parameters);
        } catch (SQLException e) {
            e.printStackTrace();
            throw  new RuntimeException(e);
        }
    }


    public int update (String sql ,Object ... parameters){

        try{
            Connection connection = JDBCUtils.getConnection();
            return runner.update(connection,sql,parameters);
        }catch (SQLException e){
            e.printStackTrace();
            throw new RuntimeException(e);
        }

    }
}
